package com.examplee.puzle;


import android.graphics.Bitmap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


class Tablero{
    //Atributos de Clase
    private Ficha[][] tablero;
    private int tamano;

//Relaciones
    private List<Ficha> fichas = new ArrayList<Ficha>();



    //Constructor
    Tablero(int tamano) {
        tablero = new Ficha[(int)(Math.sqrt(tamano))][(int)Math.sqrt(tamano)];
        this.tamano = tamano;
    }

    //Metodos

    /*
    Comprueba que las fichas esten colocadas.
    [0][1][2]
    [3][4][5]
    [6][7][-1]
     */

    boolean estaResuelto(){
        int n = 0;
        boolean resuelto = true;
        for(int i=0; i<(int)(Math.sqrt(tamano)); i++){
            for(int j=0; j<(int)(Math.sqrt(tamano)); j++){
                if(!tablero[i][j].esBlanca()){ // Si es la ficha blanca no comprueba su posicion pero aumento n.
                    if(tablero[i][j].getNumero()!=n){
                        resuelto = false;
                    }
                    n++;
                }
            }
        }
        return resuelto;
    }


    Coordenadas encontrarFichaBlanca(){
        Coordenadas coordenadas = null;

        for(int i=0; i<(int)(Math.sqrt(tamano)); i++){
            for(int j=0; j<(int)(Math.sqrt(tamano)); j++){
                if(tablero[i][j].esBlanca()){
                    coordenadas = new Coordenadas(i, j);
                }
            }
        }
    return coordenadas;
    }
    
    int getTamano(){
    	return tamano;
    }

    Ficha getFicha(int i){
        return fichas.get(i);
    }

    Ficha getFichaPorID(int id){
        Ficha ficha = null;

        for(int i=0; i<(int)(Math.sqrt(tamano)); i++){
            for(int j=0; j<(int)(Math.sqrt(tamano)); j++){
                if(tablero[i][j].getNumero() == id) ficha = tablero[i][j];
            }
        }
        return ficha;
    }   


    void colocarFichas(){
        int m = 0;
        MainActivity activity = MainActivity.getInstance();
        
        for(int i=0; i<(int)(Math.sqrt(tamano)); i++){
            for(int j=0; j<(int)(Math.sqrt(tamano)); j++){
                tablero[i][j] = fichas.get(m);
                String cadena = "imageView" + (3*i + j + 1);
                int idResource = activity.getResources().getIdentifier(cadena, "id", activity.getPackageName());
                activity.findViewById(idResource).setTag(fichas.get(m).getNumero());
                m++;
            }
        }

    }
    
    void asignarTag(){
        MainActivity activity = MainActivity.getInstance();
        
        for(int i=0; i<(int)(Math.sqrt(tamano)); i++){
            for(int j=0; j<(int)(Math.sqrt(tamano)); j++){
                String cadena = "imageView" + (3*i + j + 1);
                int idResource = activity.getResources().getIdentifier(cadena, "id", activity.getPackageName());
                activity.findViewById(idResource).setTag(tablero[i][j].getNumero());
            }
        }

    }
    
    void formarTablero(Bitmap[] piezas){

        for(int i=0; i<tamano; i++){
            Ficha ficha = new Ficha(i, piezas[i]);
            fichas.add(ficha);
        }
        // A la ficha blanca le asigno el numero -1
        fichas.get(fichas.size()-1).setNumero(-1);
        //Desordenamos la lista
        Collections.shuffle(fichas);
        colocarFichas();
    //    asignarTag();
    }
    
    void cambiarFichas(Ficha blanca, Ficha desplazada){

        for(int i=0; i<(int)(Math.sqrt(tamano)); i++){
            for(int j=0; j<(int)(Math.sqrt(tamano)); j++){
                if(tablero[i][j].getNumero() == desplazada.getNumero())
                	tablero[i][j] = blanca;
                else if (tablero[i][j].getNumero() == -1)
                		tablero[i][j] = desplazada;
            }
        }
    }
}
